/*
* 创建一个函数，接受两个或多个数组，
* 返回所给数组的 对等差分(symmetric difference) (△ or ⊕)数组.
* */

function sym(args) {
    var arr = args.slice.call(arguments);          //转化为单个数组；
    var C =arr.reduce(function(prev,cur,index,array){
        return prev.filter(function(item){
            return cur.indexOf(item)==-1;       //返回A集合中不存在于B集合的
        }).concat(                              //拼接起来
            cur.filter(function(item){
                return prev.indexOf(item) < 0;      //返回B集合中不存在于A集合的
            })
        );
    });
    return C.filter(function(item,index,array){
        return array.indexOf(item) == index;  //解决数组内部本身也可能存在重复
    });
}
sym([1, 2, 3], [5, 2, 1, 4]);


/* 给出两个集合 (如集合 A = {1, 2, 3} 和集合 B = {2, 3, 4}), 而数学术语 "对等差分" 的集合就是指由所有只在两个集合其中之一的元素组成的集合(A △ B = C = {1, 4}). 对于传入的额外集合 (如 D = {2, 3}), 你应该安装前面原则求前两个集合的结果与新集合的对等差分集合 (C △ D = {1, 4} △ {2, 3} = {1, 2, 3, 4}).*/